package com.itelite.mapper;

import com.itelite.domain.dto.GroupMemberParam;
import com.itelite.domain.dto.UserVo;
import com.itelite.domain.pojo.Group;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author 沈洋 邮箱:1845973183@qq.com
 * @create 2021/8/7-12:40
 **/
@Mapper
public interface GroupMapper {
    /**
     * 根据组编号查询组名
     * @param groupId 组编号
     * @return 组名
     */
    String queryGroupNameByGroupId(Integer groupId);

    /**
     * 查询所有组信息（不分级）
     * @return 返回所有可用组的信息
     */
    List<Group> queryGroupList();

    List<Group> querySimpleGroupList(Integer level);
    /**
     * 根据用户Id查询其管理的组织架构的节点编号
     * @param userId 用户编号
     * @return 其管理的最大节点
     */
    Integer queryGroupIdByLeaderId(Integer userId);

    /**
     * 查询IT培优整个组织架构中现存的三级组名
     * @return 返回组名
     */
    String[] getThreeLevelGroup();

    /**
     * 根据获奖记录查询组名
     * @param prizeId 获奖记录
     * @return 组名
     */
    String queryGroupNameByPrizeId(Integer prizeId);

    /**
     * 根据查询参数查询组织架构中对应的成员信息
     * @param param 查询参数
     * @return 返回限制条件下的成员信息
     */
    List<UserVo> queryGroupMember(GroupMemberParam param);

    /**
     * 根据组编号查询对应组的现任组长
     * @param groupId 组编号
     * @return 组长信息
     */
    List<UserVo> queryGroupLeader(Integer groupId);

    /**
     * 插入新组
     * @return 是否插入
     */
    Integer insertGroup(Map<String,Object> params);

    Integer insertGroupLeader(@Param("groupId") int groupId,@Param("leaderId") Integer[] leaderId);

    Integer updateGroup(Group group);

    Integer updateGroupImage(@Param("groupId") Integer groupId, String image);

    Integer updateOldLeaderState(@Param("groupId") Integer groupId, @Param("leaderIds") Integer[] leaderIds);

    Integer[] queryGroupLeaderIds(Integer groupId);

    String queryCoverByGroupId(Integer groupId);

    Integer updateGroupState(@Param("groupIds") Integer[] groupIds);

    List<Group> queryImportableGroup(Integer importable);

    List<Group> queryGroupForEmail();

    List<Group> queryIsSendEmailGroup();

    void updateGroupSendState(@Param("groupId") Integer groupId,@Param("state") Integer state);

    void updateGroupImportable(Integer groupId, Integer state);

    String queryGroupName(Integer groupId);
}
